#ifndef __VZ_RESULT_PARSE_H
#define __VZ_RESULT_PARSE_H

#include "uv.h"
#include "pal/vzResultParse.h"
#include "pal/vz_app.h"
#include "pal/lane_control.h"
#include <stdint.h>
#include "minmea.h"
#include "vzLibuv.h"
#include "CxlUtil.h"
#include "sqlLoop.h"
#include "pal/vzCamCommon.h"

#define SMALL_PIC_TYPE 0       // 小图类型
#define BIG_PIC_TYPE 1         // 大图类型
#define CALIBRATION_PIC_TYPE 2 // 标定图片类型

#define LICENSE_DATA_T                                                            \
    uint8_t licese_timeBcd[BCD_TIME_LENGTH]; /*设备时间*/                     \
    uint8_t license_str[TH_LP_LEN];          /*车牌号*/                        \
    /*                                                                            \
        车牌颜色                                                              \
        0x01：蓝色                                                             \
        0x02：黄色                                                             \
        0x03：白色                                                             \
        0x04：黑色                                                             \
        0x05：绿色                                                             \
    */                                                                            \
    uint8_t license_color; /*车牌颜色*/                                       \
    /*                                                                            \
        车牌类型                                                              \
        0x01：蓝牌小汽车                                                    \
        0x02：黑牌小汽车                                                    \
        0x03：单排黄牌                                                       \
        0x04：双排黄牌（大车尾牌，农用车）                         \
        0x05：警车车牌                                                       \
        0x06：武警车牌                                                       \
        0x07：个性化车牌                                                    \
        0x08：单排军车牌                                                    \
        0x09：双排军车牌                                                    \
        0x0A：使馆车牌                                                       \
        0x0B：香港进出中国大陆车牌                                     \
        0x0C：农用车牌                                                       \
        0x0D：教练车牌                                                       \
        0x0E：澳门进出中国大陆车牌                                     \
        0x0F：双层武警车牌                                                 \
        0x10：武警总队车牌                                                 \
        0x11：双层武警总队车牌                                           \
    */                                                                            \
    uint8_t license_type;                            /*车牌类型*/             \
    uint8_t cam_id;                                  /*相机id*/                 \
    uint8_t license_img_unique_tag;                  /*车牌图片唯一标识*/ \
    uint8_t license_reliable_percent;                /*车牌可信度*/          \
    uint8_t license_gps_type;                        /*定位数据类型*/       \
    uint8_t license_gps_gga_data[MINMEA_MAX_LENGTH]; /*定位数据*/             \
    uint8_t license_gps_rmc_data[MINMEA_MAX_LENGTH]; /*定位数据*/

#define CALIBRATION_V2_DATA_T                                                      \
    uint8_t calibration_v2_timebcd[BCD_TIME_LENGTH];        /*设备时间*/       \
    uint8_t cam_id;                                         /*相机id*/           \
    uint8_t calibration_v2_img_unique_tag;                  /*图片唯一标识*/ \
    uint8_t calibration_v2_gps_type;                        /*定位数据类型*/ \
    uint8_t calibration_v2_gps_gga_data[MINMEA_MAX_LENGTH]; /*定位数据*/       \
    uint8_t calibration_v2_gps_rmc_data[MINMEA_MAX_LENGTH]; /*定位数据*/       \
    uint32_t calibration_v2_reverse;                        /*保留数据，填充ff*/
// TODO： 填充ff忘记了

/**************** 客户端发送帧 ****************/

// 车牌摄像机数据
typedef struct
{
    HEAD_T
    LICENSE_DATA_T
    CRC_T
} __attribute__((__packed__)) license_data_t;

// 标定数据类型 v2
typedef struct
{
    HEAD_T
    CALIBRATION_V2_DATA_T
    CRC_T
} __attribute__((__packed__)) calibration_v2_data_t;

/**************** 服务端应答帧 ****************/
// 车牌摄像机响应数据
typedef struct
{
    HEAD_T
    int32_t license_data_status;
} __attribute__((__packed__)) respon_license_data_t;

void parseIvsResult(TH_PlateResult *stDisc, VZ_PACKET_T *camData, VzAppStruct *vzAppStruct);
void parseSnapShotResult(uint8_t *camDataBase64, VzAppStruct *vzAppStruct);
void sendPicWork(uv_work_t *workReq);
void afterPicSendWorkCb(uv_work_t *workReq, int32_t status);

void sql2SocketUvInit();
void dispatchSql2SocketEvent();

#endif